package cn.impl;

import cn.annotation.EquipmentLog;
import cn.annotation.Log;
import cn.basic.HibBaseDAOImpl;
import cn.basic.iHibBaseDAO;
import cn.common.properties.EquipmentType;
import cn.common.properties.LogOperType;
import cn.dao.BorrowDAO;
import cn.model.TBorrow;
import cn.model.VBorrowEquipment;
import org.springframework.stereotype.Component;

import java.util.List;
@Component("borrowdao")
public class BorrowDAOImpl implements BorrowDAO {

    //连接数据库操作层接口,实现业务与数据的交换
    private iHibBaseDAO bdao= null;

    public BorrowDAOImpl(){
        bdao = new HibBaseDAOImpl();
    }

    /**
     * 添加一条信息
     *
     * @param borrow 对象
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.ADD,operationName="添加一条设备借用信息")
    @Log(isSaveLog=true,operationType= LogOperType.ADD,operationName="添加一条设备借用信息")
    @Override
    public int addBorrow(TBorrow borrow) {
        return bdao.insert(borrow);
    }

    /**
     * 删除一条申请信息
     *
     * @param borrowid 编号
     * @return 添加成功返回受影响的行数
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.DELETE,operationName="删除一条设备借用信息")
    @Log(isSaveLog=true,operationType= LogOperType.DELETE,operationName="删除一条设备借用信息")
    @Override
    public boolean deleteBorrow(int borrowid) {

        return bdao.delete(borrowid);
    }

    /**
     * 修改一条信息
     *
     * @param borrow 需要修改的对象
     * @return
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="修改一条设备借用信息")
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条设备借用信息")
    @Override
    public boolean modifyBorrow(TBorrow borrow) {
        return bdao.update(borrow);
    }

    /**
     * 修改一条状态信息
     *
     * @param audit 需要修改的对象
     * @return
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.MODIFY,operationName="修改一条设备借用信息的状态")
    @Log(isSaveLog=true,operationType= LogOperType.MODIFY,operationName="修改一条信息的状态")
    @Override
    public boolean modifyBorrowById(int borrowid,int audit) {
        String hql ="update T_Borrow set audit = ? where borrowid = ?";
        Object para[] ={audit,borrowid};
        return bdao.update(hql,para);
    }

    /**
     * 获取所有信息的列表
     *
     * @param currentPage 按分页查询的当前页
     * @param pageSize    按分页查询的每页数量
     * @return List
     */
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="获取设备借用的所有数据信息")
    @Override
    public List<VBorrowEquipment> getAllBorrowList(int currentPage, int pageSize) {
        String hql = "from VBorrowEquipment";
        return bdao.selectByPage(hql,currentPage,pageSize);
    }

    /**
     * 获取所有设备借用信息的列表
     *
     * @param wherecondition
     * @param currentPage    按分页查询的当前页
     * @param pageSize       按分页查询的每页数量
     * @return List
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="查询设备借用的所有数据信息")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="获取设备借用的所有数据信息进行分页")
    @Override
    public List<VBorrowEquipment> getBorrowListByPage(String wherecondition, int currentPage, int pageSize) {
        String hql ="from VBorrowEquipment";
        if (wherecondition!=null && !wherecondition.equals("")){
            hql += wherecondition;
        }if (wherecondition == null && wherecondition.equals("")){
            hql += "order by borrowid asc";
        }
        return bdao.selectByPage(hql,currentPage,pageSize);
    }

    /**
     * 根据状态查询VBorrowEquipment对象
     *
     * @param audit       状态int
     * @param currentPage 查询开始的页数
     * @param pageSize    查询要求的每页的记录数
     * @return List<VBorrowEquipment>
     */
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="查询VBorrowEquipment状态信息")
    @Override
    public List<VBorrowEquipment> getBorrowByStatus(int audit, int currentPage, int pageSize) {
        String hql="from VBorrowEquipment where audit = ?";
        Object[] para = {audit};
        return bdao.selectByPage(hql, para, currentPage, pageSize);
    }

    /**
     * 根据用户编号查询VBorrowEquipment对象
     * @param userid      用户编号
     * @param currentPage 查询开始的页数
     * @param pageSize    查询要求的每页的记录数
     * @return List<VBorrowEquipment>
     */
    @EquipmentLog(isSaveLog=true,operationType= EquipmentType.QUERY,operationName="通过用户编号查询当前用户借用设备申请信息信息")
    @Log(isSaveLog=true,operationType= LogOperType.QUERY,operationName="通过用户编号查询用户借用申请信息列表")
    @Override
    public List<VBorrowEquipment> getBorrowByUserid(String userid, int currentPage, int pageSize) {
        String hql="from VBorrowEquipment where userid = ?";
        Object[] param ={userid};
        return bdao.selectByPage(hql, param, currentPage, pageSize);
    }

    /**
     * 获取记录的的数量
     * @return
     */
    @Override
    public int getBorrowAmount() {
        String hql ="select count(*) from VBorrowEquipment";
        return bdao.selectValue(hql);
    }

    /**
     * 获取记录条数的的数量
     *
     * @param userid@return
     */
    @Override
    public int getAmountByuser(String userid) {
        String hql ="select count(*) from VBorrowEquipment where userid =?";
        Object[] param = {userid};
        return bdao.selectValue(hql,param);
    }

    /**
     * 通过ID查询
     *
     * @param borrowid 编号
     * @return 返回用户信息列表
     */
    @Override
    public VBorrowEquipment getBorrowById(int borrowid) {
        return (VBorrowEquipment) bdao.findById(VBorrowEquipment.class, borrowid);
    }
}
